<?php

/**
 * AmplifyCMS
 *
 * This file is part of AmplifyCMS.
 *
 * AmplifyCMS is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * AmplifyCMS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @author Rodrigo Rutkoski Rodrigues, <rutkoski@gmail.com>
 * @copyright Copyright 2008 Rodrigo Rutkoski Rodrigues
 *
 * $Id: $
 */

/**
 * Extract limit/order by information from route.
 * 
 * @author Rodrigo Rutkoski Rodrigues <rutkoski@gmail.com>
 *
 */
class AmpIndexComponent extends Component
{

  /**
   * Constructor.
   * 
   * @return void
   */
  public function __construct()
  {
    $this->parseLimit();
    $this->parseOrder();
  }

  /**
   * Extract limit information from route in the form /limit:<limit> or /limit:<offset>:<limit>.
   * 
   * @return void
   */
  protected function parseLimit()
  {
    $route = Simplify::getRequest()->get('route');
    
    if (preg_match('#/limit:([0-9]+)(?::([0-9]+))?(?:/.*)?$#', $route, $o)) {
      $this->set('offset', count($o) == 3 ? $o[1] : 0);
      $this->set('limit', count($o) == 3 ? $o[2] : $o[1]);
    }
  }

  /**
   * Extract order by information from route in the form /order:<field>:<direction>.
   * Direction is optional and ASC by default. 
   * 
   * @return void
   */
  protected function parseOrder()
  {
    $route = Simplify::getRequest()->get('route');
    
    if (preg_match('#/order:(.+?)(?::(ASC|DESC))?(?:/.*)?$#i', $route, $o)) {
      $this->set('order', $o[1] . (count($o) == 3 ? ' ' . $o[2] : ' asc'));
    }
  }
}

?>